package mysql8学习.高级.第06章_索引的数据结构;

/**
 * 索引按照物理实现方式，索引可以分为2种:
 *  聚簇(聚集  针对主键的索引)和非聚簇(非聚集  非主键的索引)索引。
 *  我们也把非聚集索引称为二级索引或者辅助索引
 *
 * 1.聚簇索引
 * 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式(所有的用户记录都存储在了叶子节点)，
 * 也就是所谓的索引即数据，数据即索引。
 *
 *        术语"聚族”表示数据行和相邻的键值聚族的存储在一起。
 *
 * 1.使用记录主键值的大小进行记录和页的排序,这包括三个方面的含义:
 *   。页内的记录是按照主键的大小顺序排成一个单向链表。
 *   。各个存放用户记录的页也是根据页中用户记录的主键大小顺序排成一个双向链表。
 *   。存放目录项记录的页分为不同的层次，
 *     在同一层次中的页也是根据页中目录项记录的主键大小顺序排成一个双向链表。
 * 2. B+树的叶子节点(最底层)存储的是完整的用户记录。
 *     所谓完整的用户记录，就是指这个记录中存储了所有列的值(包括隐藏列)。
 *
 * 我们把具有这两种特性的B+树称为聚簇索引，所有完整的用户记录都存放在这个聚簇索引的叶子节点处。
 * 这种聚簇索引并不需要我们在MySQL语句中显式的使用INDEX语句去创建，
 * InnoDB 存储引擎会自动的为我们创建聚簇索引。（回再添加数据过程之中  B+数已经创建完了）
 *
 *
 **************聚簇索引优点:
 * ●数据访问更快，因为聚簇索引将索引和数据保存在同一个B+树中，
 *   因此从聚簇索引中获取数据比非聚簇索引更快
 * ●聚簇索引对于主键的排序查找和范围查找速度非常快
 * ●按照聚簇索引排列顺序,查询显示-定范围数据的时候，
 * 由于数据都是紧密相连，数据库不用从多个数据块中提取数据，所以节省了大量的I/O操作。
 *
 ***************聚簇索引(主键索引)缺点:
 * ● 插入速度严重依赖于插入顺序，按照主键的顺序插入是最快的方式，
 *   否则将会出现页分裂，严重影响性能。因此,对于InnoDB表，我们一般都会定义一个自增的ID列为主键
 * ● 更新主键的代价很高，因为将会导致被更新的行移动。
 *   因此，对于InnoDB表， 我们一般定义主键为不可更新
 * ● 二级索引（非聚簇索引）访问需要两次索引查找，第一次找到主键值， 第二次根据主键值找到行数据
 *
 *
 *
 * 限制:
 * ● 对于MySQL数据库目前只有 InnoDB 数据引擎支持聚簇索引，而 MyISAM 并不支持聚簇索引。
 * ● 由于数据物理存储排序方式只能有一种，所以每个MySQL的表只能有一个聚簇索引。
 *     一般情况下就是该表的主键。
 * ● 如果没有定义主键，InnoDB 会选择非空的唯一索引代替
 *   如果没有这样的索引，InnoDB 会隐式的定义一个主键来作为聚簇索引。
 * ● 为了充分利用聚簇索引的聚簇的特性,所以 InnoDB 表的主键列尽量选用有字的顺序 id,而不建议用无序的id,
 *   比如UUID、MD5、 HASH、 字符串列作为主键无法保证数据的顺序增长。
 *
 *
 */
public class E1_聚簇索引 {
}
